package net.loststone.ingestion;

import java.io.IOException;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import net.loststone.*;


class IdesCatService extends AbstractEconInfoService {

  static final String DESPESA_MITJANA_HABITATGE = "http://www.idescat.cat/dequavi/Dequavi?TC=444&V0=7&V1=8&ex=1"
  static final String RENDA_FAMILIAR_DISPONIBLE_BRUTA = "http://www.idescat.cat/economia/inec?tc=3&id=5109&dt=200700&ex=1"
  static final String DESPESA_MITJANA_LLARS = "http://www.idescat.cat/dequavi/Dequavi?TC=444&V0=6&V1=21&ex=1"
  static final String FONT = "Idescat"
  boolean transactional = true

  String agafarDespesaMitjanaHabitatge() {
    def stream = getExcel(DESPESA_MITJANA_HABITATGE);
    processDMH(stream)
  }

  String agafarRendaFamiliarDisponibleBruta() {
    def stream = getExcel(RENDA_FAMILIAR_DISPONIBLE_BRUTA);
    processRFDB(stream)
  }

  String agafarDespesaMitjanaDeLlars() {
    def stream = getExcel(DESPESA_MITJANA_LLARS);
    processDMLL(stream)
  }

  /**
   * retorna un array, el primer camp es el catala, el segon l'espanyol
   */
  def processDMH(stream) {
    HSSFWorkbook wb = new HSSFWorkbook(stream);
    Sheet catalunya = wb.getSheetAt(0);
    Sheet espanya = wb.getSheetAt(1);
    def indicadorCatSp = []

    def curr = 0;

    // catalunya
    for (Row row : catalunya) {
      // Filter the headers of the excel file
      if (curr != 5) {
        curr++;
        continue;
      }
      indicadorCatSp[0] = row.getCell(1).getNumericCellValue()
      curr++;
          
    }

    curr = 0;
    for (Row row : espanya) {
      // Filter the headers of the excel file
      if (curr != 5) {
        curr++;
        continue;
      }
      indicadorCatSp[1] = row.getCell(1).getNumericCellValue()
      curr++;
    }

    // creem dades per catalunya i ho guardem a la base de dades
    Town cat = Town.findByNameAndType("Cataluña","state");
    EconInfo catInfo = new EconInfo();
    catInfo.nom = this.GASTO_MEDIO_DEBIDO_VIVIENDA
    catInfo.afecta = cat;
    catInfo.font = FONT
    catInfo.valor = indicadorCatSp[0]

    updateOrSave(catInfo)

    // el mateix per espanya
    Town sp = Town.findByNameAndType("España","country");
    EconInfo spInfo = new EconInfo();
    spInfo.nom = this.GASTO_MEDIO_DEBIDO_VIVIENDA
    spInfo.afecta = sp;
    spInfo.font = FONT
    spInfo.valor = indicadorCatSp[1]

    updateOrSave(spInfo)
    
    spInfo.save();
    "[Idescat: Despesa Mitjana per Habitatge] Afegits Catalunya i Espanya amb indicadors: "+indicadorCatSp
  }

  def processRFDB(stream) {
    HSSFWorkbook wb = new HSSFWorkbook(stream);
    Sheet catalunya = wb.getSheetAt(1);
    Sheet espanya = wb.getSheetAt(2);
    def indicadorCatSp = []

    def curr = 0;

    // catalunya
    for (Row row : catalunya) {
      // Filter the headers of the excel file
      if (curr != 8) {
        curr++;
        continue;
      }
      indicadorCatSp[0] = row.getCell(3).getStringCellValue()
      curr++;

    }

    curr = 0;
    for (Row row : espanya) {
      // Filter the headers of the excel file
      if (curr != 8) {
        curr++;
        continue;
      }
      indicadorCatSp[1] = row.getCell(3).getStringCellValue()
      curr++;
    }

    // creem dades per catalunya i ho guardem a la base de dades
    // TODO mirar si el valor és el mateix.
    Town cat = Town.findByNameAndType("Cataluña","state");
    EconInfo catInfo = new EconInfo();
    catInfo.nom = GASTO_MEDIO_POR_HOGAR
    catInfo.afecta = cat;
    catInfo.font = FONT
    catInfo.valor = Integer.parseInt(indicadorCatSp[0].replace(".",""))
    updateOrSave(catInfo)

    // el mateix per espanya
    Town sp = Town.findByNameAndType("España","country");
    EconInfo spInfo = new EconInfo();
    spInfo.nom = GASTO_MEDIO_POR_HOGAR
    spInfo.afecta = sp;
    spInfo.font = FONT
    spInfo.valor = Integer.parseInt(indicadorCatSp[1].replace(".",""))
    updateOrSave(spInfo)
    "[Idescat: Despesa mitjana llars] Afegits Catalunya i Espanya amb indicadors: "+indicadorCatSp
  }
  
  /**
   * processa la despesa mitjana de les llars.
   */
  def processDMLL(stream) {
    HSSFWorkbook wb = new HSSFWorkbook(stream);
    Sheet catalunya = wb.getSheetAt(0);
    Sheet espanya = wb.getSheetAt(1);
    def indicadorCatSp = []

    def curr = 0;

    // catalunya
    for (Row row : catalunya) {
      // Filter the headers of the excel file
      if (curr != 8) {
        curr++;
        continue;
      }
      indicadorCatSp[0] = row.getCell(2).getNumericCellValue()
      curr++;

    }

    curr = 0;
    for (Row row : espanya) {
      // Filter the headers of the excel file
      if (curr != 8) {
        curr++;
        continue;
      }
      indicadorCatSp[1] = row.getCell(2).getNumericCellValue()
      curr++;
    }

     // creem dades per catalunya i ho guardem a la base de dades
    // TODO mirar si el valor és el mateix.
    Town cat = Town.findByNameAndType("Cataluña","state");
    EconInfo catInfo = new EconInfo();
    catInfo.nom = RENTA_FAMILIAR_DISPONIBLE_BRUTA
    catInfo.afecta = cat;
    catInfo.font = FONT
    catInfo.valor = indicadorCatSp[0]
    updateOrSave(catInfo)

    // el mateix per espanya
    Town sp = Town.findByNameAndType("España","country");
    EconInfo spInfo = new EconInfo();
    spInfo.nom = RENTA_FAMILIAR_DISPONIBLE_BRUTA
    spInfo.afecta = sp;
    spInfo.font = FONT
    spInfo.valor = indicadorCatSp[1]
    updateOrSave(spInfo)
    "[Idescat: Renda familiar disponible bruta] Afegits Catalunya i Espanya amb indicadors: "+indicadorCatSp
  }


 
    
}
